﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using BookStore.Solution.Entities;
using BookStore.Solution.BLL;
using BookStore.Solution.Configurations;

namespace BookStore.Solution.Presentation
{
    public partial class frmMain : DevComponents.DotNetBar.OfficeForm
    {
        private List<SuperTabItem> listTabs = new List<SuperTabItem>();

        private void CreateTab(UserControl uc, string NameTab)
        {
            if (!SearchTab(NameTab))
            {
                SuperTabItem st = new SuperTabItem();
                SuperTabControlPanel pn;
                uc.Dock = DockStyle.Fill;
                st = superTabControl.CreateTab(NameTab);
                superTabControl.SelectedTabIndex = superTabControl.Tabs.Count - 1;
                pn = (SuperTabControlPanel)st.AttachedControl;
                pn.Controls.Add(uc);
                listTabs.Add(st);
            }
        }
        private bool SearchTab(string NameText)
        {
            for(int i =0; i< listTabs.Count;i++)
            {
                if (listTabs[i].Text == NameText)
                {
                    superTabControl.SelectedTabIndex = i;
                    return true;
                }
            }
            return false;
        }

        private bool LogIn()
        {
            frmLogin frm = new frmLogin();
            frm.ShowDialog();
            if (frm.isLogin == true)
            {
                EnableRole();
                biLogIn.Enabled = false;
                biLogOut.Enabled = biChangePass.Enabled = biSetUp.Enabled = true;
                return true;
            }
            return false;
        }

        private void EnableRole()
        {
            Role[] roles = new Role[AccountManager.CurrentAccount.Roles.Count];
            AccountManager.CurrentAccount.Roles.CopyTo(roles, 0);
            List<string> rolenames = new List<string>();
            foreach (Role r in roles)
                rolenames.Add(r.RoleName);
            if (rolenames.Contains("Thêm, xóa, cập nhật hóa đơn") || rolenames.Contains("Tìm kiếm hóa đơn"))
                biBill.Enabled = true;
            if (rolenames.Contains("Thêm, xóa, cập nhật phiếu nhập") || rolenames.Contains("Tìm kiếm phiếu nhập"))
                biEntryBill.Enabled = true;
            if (rolenames.Contains("Thêm, xóa, cập nhật sách") || rolenames.Contains("Tìm kiếm sách"))
                biBook.Enabled = true;
            if (rolenames.Contains("Thêm, xóa, cập nhật vpp") || rolenames.Contains("Tìm kiếm vpp"))
                biStationery.Enabled = true;
            if (rolenames.Contains("Thêm, xóa, cập nhật danh mục") || rolenames.Contains("Tìm kiếm danh mục"))
                biCategory.Enabled = true;
            if (rolenames.Contains("Thêm, xóa, cập nhật tác giả") || rolenames.Contains("Tìm kiếm tác giả"))
                biAuthor.Enabled = true;
            if (rolenames.Contains("Thêm, xóa, cập nhật nhà xuất bản") || rolenames.Contains("Tìm kiếm nhà xuất bản"))
                biPublisher.Enabled = true;
            if (rolenames.Contains("Thêm, xóa, cập nhật nhà cung cấp") || rolenames.Contains("Tìm kiếm nhà cung cấp"))
                biSupplier.Enabled = true;
            if (rolenames.Contains("Thêm, xóa, cập nhật chi tiêu") || rolenames.Contains("Tìm kiếm chi tiêu"))
                biIE.Enabled = true;
            if (rolenames.Contains("Xem thống kê"))
                biStatistic.Enabled = biInventory.Enabled = true;
            if (rolenames.Contains("Thêm, xóa, cập nhật nhân viên") || rolenames.Contains("Tìm kiếm nhân viên"))
                biEmployee.Enabled = true;
            if (rolenames.Contains("Thêm, xóa, cập nhật chức vụ") || rolenames.Contains("Tìm kiếm chức vụ"))
                biPosition.Enabled = true;
            if (rolenames.Contains("Thêm, xóa, cập nhật tài khoản") || rolenames.Contains("Tìm kiếm tài khoản"))
                biAccount.Enabled = true;
            if (rolenames.Contains("Thêm, xóa, cập nhật khuyến mãi") || rolenames.Contains("Tìm kiếm khuyến mãi"))
                biPromotion.Enabled = true;
            if (rolenames.Contains("Sao lưu"))
                biBackup.Enabled = true;
            if (rolenames.Contains("Phục hồi"))
                biRestore.Enabled = true;
            if (rolenames.Contains("Xem nhật ký"))
                biSystemLog.Enabled = true;
        }

        void HideBI()
        {
            biBill.Enabled = biPromotion.Enabled = biInventory.Enabled = biEntryBill.Enabled = biBook.Enabled =
                biStatistic.Enabled = biCategory.Enabled = biPublisher.Enabled =
                biSupplier.Enabled = biEmployee.Enabled = biPosition.Enabled =
                biAccount.Enabled = biIE.Enabled = biStatistic.Enabled =
                biBackup.Enabled = biRestore.Enabled = biSystemLog.Enabled =
                biLogOut.Enabled = biChangePass.Enabled = biStationery.Enabled = biAuthor.Enabled = biSetUp.Enabled = false;
            biLogIn.Enabled = true;
        }

        public frmMain()
        {
            InitializeComponent();
        }

        private void biAccount_Click(object sender, EventArgs e)
        {
            ucAccount acc = new ucAccount();
            CreateTab(acc, "Tài khoản");
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            if (Configs.FirstLaunch == "True")
            {
                frmSetUp frm = new frmSetUp();
                frm.ShowDialog();
            }
            HideBI();
        }

        private void frmMain_Shown(object sender, EventArgs e)
        {
            LogIn();
        }

        private void biBill_Click(object sender, EventArgs e)
        {
            ucBill bill = new ucBill();
            CreateTab(bill, "Hóa đơn");
        }

        private void biEntryBill_Click(object sender, EventArgs e)
        {
            ucEntryBill entry = new ucEntryBill();
            CreateTab(entry, "Phiếu nhập");
        }

        private void biBook_Click(object sender, EventArgs e)
        {
            ucBook book = new ucBook();
            CreateTab(book, "Sách");
        }

        private void biStationery_Click(object sender, EventArgs e)
        {
            ucStationery stationery = new ucStationery();
            CreateTab(stationery, "Văn phòng phẩm");
        }

        private void biCategory_Click(object sender, EventArgs e)
        {
            ucCategory cate = new ucCategory();
            CreateTab(cate, "Danh mục");
        }

        private void biAuthor_Click(object sender, EventArgs e)
        {
            ucAuthor author = new ucAuthor();
            CreateTab(author, "Tác giả");
        }

        private void biPublisher_Click(object sender, EventArgs e)
        {
            ucPublisher pub = new ucPublisher();
            CreateTab(pub, "Nhà xuất bản");
        }

        private void biSupplier_Click(object sender, EventArgs e)
        {
            ucSupplier supplier = new ucSupplier();
            CreateTab(supplier, "Nhà cung cấp");
        }

        private void biIE_Click(object sender, EventArgs e)
        {
            ucIE ucie = new ucIE();
            CreateTab(ucie, "Chi tiêu");
        }

        private void biStatistic_Click(object sender, EventArgs e)
        {
            ucStatistic stat = new ucStatistic();
            CreateTab(stat, "Thống kê");
        }

        private void biEmployee_Click(object sender, EventArgs e)
        {
            ucEmployee ucemployee = new ucEmployee();
            CreateTab(ucemployee, "Nhân viên");
        }

        private void biPosition_Click(object sender, EventArgs e)
        {
            ucPosition position = new ucPosition();
            CreateTab(position, "Chức vụ");
        }

        private void biBackup_Click(object sender, EventArgs e)
        {
            frmBackup frm = new frmBackup();
            frm.ShowDialog();
        }

        private void biRestore_Click(object sender, EventArgs e)
        {
            frmRestore frm = new frmRestore();
            frm.ShowDialog();
        }

        private void biSystemLog_Click(object sender, EventArgs e)
        {
            ucSystemLog position = new ucSystemLog();
            CreateTab(position, "Nhật ký hệ thống");
        }

        private void biLogIn_Click(object sender, EventArgs e)
        {
            LogIn();
        }


        private void CloseTab()
        {
            for (int i = listTabs.Count - 1; i >= 0;i--)
            {
                listTabs[i].Close();
            }
        }
        private void biLogOut_Click(object sender, EventArgs e)
        {
            AccountManager.LogOut();
            HideBI();
            CloseTab();
            MessageBox.Show("Đăng xuất thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void biChangePass_Click(object sender, EventArgs e)
        {
            frmChangePassword frm = new frmChangePassword();
            frm.ShowDialog();
        }

        private void biExit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void superTabControl_TabItemClose(object sender, SuperTabStripTabItemCloseEventArgs e)
        {
            SuperTabItem sst = e.Tab as SuperTabItem;
            listTabs.Remove(sst);
        }

        private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (AccountManager.CurrentAccount != null)
            {
                HideBI();
                AccountManager.LogOut();
            }
        }

        private void biInventory_Click(object sender, EventArgs e)
        {
            ucInventory inven = new ucInventory();
            CreateTab(inven, "Báo cáo tồn kho");
        }

        private void biPromotion_Click(object sender, EventArgs e)
        {
            ucPromotion inven = new ucPromotion();
            CreateTab(inven, "Khuyến mãi");
        }

        private void biSetUp_Click(object sender, EventArgs e)
        {
            frmSetUp frm = new frmSetUp();
            frm.ShowDialog();
        }

        private void biAboutUs_Click(object sender, EventArgs e)
        {
            FrmAbout frm = new FrmAbout();
            frm.ShowDialog();
        }
    }
}